home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-10-22 | 1.4 KB | 61 lines | [TEXT/KAHL] |
- // Copyright: © 1992 by Apple Computer, Inc., all rights reserved.
-
- #include "mtb.h"
-
- typedef SndCommand *SndCmdPtr;
-
- typedef struct {
- short format;
- short numSynths;
- } Snd1Header, *Snd1HdrPtr, **Snd1HdrHndl;
-
- typedef struct {
- short format;
- short refCount;
- } Snd2Header, *Snd2HdrPtr, **Snd2HdrHndl;
-
- typedef struct {
- short synthID;
- long initOption;
- } SynthInfo, *SynthInfoPtr;
-
-
- long GetSndHdrOffset (Handle sndHandle)
- {
- short howManyCmds;
- long sndOffset = 0;
- Ptr sndPtr;
-
- if (sndHandle == nil) return 0;
- sndPtr = *sndHandle;
- if (sndPtr == nil) return 0;
-
- if ((*(Snd1HdrPtr)sndPtr).format == firstSoundFormat) {
- short synths = ((Snd1HdrPtr)sndPtr)->numSynths;
- sndPtr += sizeof(Snd1Header) + (sizeof(SynthInfo) * synths);
- } else {
- sndPtr += sizeof(Snd2Header);
- }
-
- howManyCmds = *(short *)sndPtr;
-
- sndPtr += sizeof(howManyCmds);
- // sndPtr is now at the first sound command - cruise all
- // commands and find the first soundCmd or bufferCmd
- while (howManyCmds > 0) {
- switch (((SndCmdPtr)sndPtr)->cmd) {
- case (soundCmd + dataOffsetFlag):
- case (bufferCmd + dataOffsetFlag):
- sndOffset = ((SndCmdPtr)sndPtr)->param2;
- howManyCmds = 0; /* done, get out of loop */
- break;
- default: /* catch any other type of commands */
- sndPtr += sizeof(SndCommand);
- howManyCmds--;
- break;
- }
- } /* done with all the commands */
-
- return sndOffset;
- }
-